﻿//========================================================= 
/**@file SM2CmdDriver.h
 * @brief SM2算法
 * 
 * @date 2017-05-12   21:09:42
 * @author Zhyioo 
 * @version 1.0
 */ 
//--------------------------------------------------------- 
#ifndef _LIBZHOUYB_SM2CMDDRIVER_H_
#define _LIBZHOUYB_SM2CMDDRIVER_H_
//--------------------------------------------------------- 
#include "../CommonCmdDriver.h"
#include "../../../extension/security/openssl/SM2_Provider.h"
using zhou_yb::extension::security::SM2_Provider;
//--------------------------------------------------------- 
namespace zhou_yb {
namespace application {
namespace driver {
//--------------------------------------------------------- 
class SM2CmdDriver : public CommonCmdDriver
{
public:
    SM2CmdDriver() : CommonCmdDriver()
    {

    }
    /**
     * @brief 生成公私钥对
     * @date 2017-05-17 12:34
     * 
     * @retval xB : hex 公钥X
     * @retval yB : hex 公钥Y
     * @retval dB : hex 私钥
     */
    LC_CMD_METHOD(GenKEY)
    {
        SM2_Provider sm2 = SM2_Provider::Default();
        ByteBuilder xB(32);
        ByteBuilder yB(32);
        ByteBuilder dB(32);

        if(!sm2.GenKEY(xB, yB, dB))
            return false;

        rlt.Put("xB", ArgConvert::ToString(xB));
        rlt.Put("yB", ArgConvert::ToString(yB));
        rlt.Put("dB", ArgConvert::ToString(dB));
        return true;
    }
    /**
     * @brief 公钥加密数据
     * @date 2017-05-17 12:38
     * 
     * @param [in] xB : hex 公钥X
     * @param [in] yB : hex 公钥Y
     * @param [in] DATA : hex 需要加密的数据
     * @param [in] Random : hex [default:自动生成] 加密数据时的随机数
     * 
     * @retval DATA : hex 加密后的数据
     * @retval Random : hex 加密数据时的随机数
     */
    LC_CMD_METHOD(Encrypt)
    {
        string sRandom;
        
        return true;
    }
    /**
     * @brief 私钥解密数据
     * @date 2017-05-17 12:39
     * 
     * @param [in] dB : hex 私钥
     * @param [in] DATA : hex 需要解密的数据
     * 
     * @retval DATA : hex 解密后的数据
     */
    LC_CMD_METHOD(Decrypt)
    {
        return true;
    }
};
//--------------------------------------------------------- 
} // nemespace driver
} // namespace application
} // namespace zhou_yb
//--------------------------------------------------------- 
#endif // _LIBZHOUYB_SM2CMDDRIVER_H_
//========================================================= 